package pers.dawnyang.config.saToken;

import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import cn.dev33.satoken.stp.StpInterface;
import pers.dawnyang.modular.system.domain.common.PermsInfo;
import pers.dawnyang.modular.system.domain.common.RoleInfo;
import pers.dawnyang.modular.system.domain.common.UserInfo;
import pers.dawnyang.modular.system.service.SystemService;

/**
 * 自定义权限验证接口扩展
 */
@Component // 打开此注解，保证此类被springboot扫描，即可完成sa-token的自定义权限验证扩展
public class StpInterfaceImpl implements StpInterface {

  @Autowired
  private SystemService systemService;

  /**
   * 返回一个账号所拥有的权限码集合
   */
  @Override
  public List<String> getPermissionList(Object loginId, String loginType) {
    UserInfo userInfo = systemService.getUserInfo(loginId.toString());
    List<RoleInfo> roleList = userInfo.getRoleList();
    List<String> permissionList = new ArrayList<>();
    for (RoleInfo roleInfo : roleList) {
      List<PermsInfo> permsList = roleInfo.getPermsList();
      for (PermsInfo permsInfo : permsList) {
        permissionList.add(permsInfo.getPerms());
      }
    }
    return permissionList;
  }

  /**
   * 返回一个账号所拥有的角色标识集合
   */
  @Override
  public List<String> getRoleList(Object loginId, String loginType) {
    // 本list仅做模拟，实际项目中要根据具体业务逻辑来查询角色
    // List<String> list = new
    // ArrayList<String>();
    // list.add("admin");
    // list.add("super-admin");
    return null;
  }

}
